package cn.iocoder.yudao.module.call.convert.agent;

import cn.hutool.json.JSONObject;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.call.controller.admin.agent.vo.AgentMonitorReqVO;
import cn.iocoder.yudao.module.call.controller.admin.agent.vo.AgentRespVO;
import cn.iocoder.yudao.module.call.dal.dataobject.agent.AgentDO;
import cn.iocoder.yudao.module.call.dal.dataobject.group.GroupDO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;
import java.util.Map;

@Mapper
public interface AgentConverter {

    AgentConverter INSTANCE = Mappers.getMapper(AgentConverter.class);

    default AgentRespVO convert(AgentDO respVO, Map<Long, AdminUserRespDTO> userMap, Map<Long, GroupDO> groupMap) {
        AgentRespVO result = BeanUtils.toBean(respVO, AgentRespVO.class);
        // 负责人
        MapUtils.findAndThen(userMap, respVO.getOwnerUserId(), data -> result.setOwnerUsername(data.getNickname()));
        // 第一班组
        MapUtils.findAndThen(groupMap, respVO.getGroupId(), data -> result.setGroupName(data.getName()));
        // 第二班组
        MapUtils.findAndThen(groupMap, respVO.getSecGroupId(), data -> result.setSecGroupName(data.getName()));

        return result;
    }

    default PageResult<AgentRespVO> convert0(PageResult<AgentDO> pageResult, Map<Long, AdminUserRespDTO> userMap, Map<Long, GroupDO> groupMap) {
        List<AgentRespVO> dataList = CollectionUtils.convertList(pageResult.getList(), caseDO -> convert(caseDO, userMap, groupMap));
        PageResult<AgentRespVO> newResult = new PageResult<AgentRespVO>();
        newResult.setList(dataList);
        newResult.setTotal(pageResult.getTotal());
        return newResult;
    }

}
